/* eslint-disable no-unused-vars */
/*
 * @Author      : ZhouQiJun
 * @Date        : 2025-08-10 20:20:21
 * @LastEditors : ZhouQiJun
 * @LastEditTime: 2025-08-10 21:22:01
 * @Description : gis 默认配置
 */
import { merge } from 'es-toolkit'

const backgroundUrl = 'https://cdn.jsdelivr.net/npm/ol-vue-hooks/dist/ol-vue-hooks-bg-min.png'

/**
 * 应用的默认配置项
 */
type DefaultOptions = {
  /** 背景图片 URL */
  bgUrl: string
}

/**
 * 默认配置对象
 * @internal
 */
const defaultOptions: DefaultOptions = {
  bgUrl: backgroundUrl,
}

/**
 * 获取默认配置中指定键的值
 *
 * @param key - 配置项的键名
 * @returns 对应配置项的值
 *
 * @example
 * ```ts
 * const bg = getDefaultOptions('bgUrl')
 * console.log(bg) // '/ol-vue-hooks-100_2.png'
 * ```
 */
export function getDefaultOptions<K extends keyof DefaultOptions>(key: K): DefaultOptions[K] {
  return defaultOptions[key]
}

/**
 * 更新默认配置项
 *
 * 支持两种调用方式：
 * 1. **单字段更新**：传入 `key` 和 `value` 更新单个字段
 * 2. **批量更新**：传入一个对象，批量更新多个字段
 *
 * @param key - 要更新的字段名
 * @param value - 新值（类型与字段匹配）
 * @param options - 一个 `Partial<DefaultOptions>` 对象，可一次性更新多个字段
 *
 * @example
 * ```ts
 * // 单字段更新
 * setDefaultOptions('bgUrl', '/new.png')
 *
 * // 批量更新
 * setDefaultOptions({ bgUrl: '/new.png' })
 * ```
 */
export function setDefaultOptions<K extends keyof DefaultOptions>(key: K, value: DefaultOptions[K]): void
export function setDefaultOptions(options: Partial<DefaultOptions>): void
export function setDefaultOptions<K extends keyof DefaultOptions>(
  keyOrOptions: K | Partial<DefaultOptions>,
  value?: DefaultOptions[K],
) {
  if (typeof keyOrOptions === 'string') {
    defaultOptions[keyOrOptions] = value as DefaultOptions[K]
  } else {
    merge(defaultOptions, keyOrOptions)
  }
}
